const utils = {
  /**
   * 消息反馈-轻提示
   * @param {string} title 提示的文本
   */
  toast(title = '数据加载失败') {
    // 调用微信提供的API给用户显示轻提示
    wx.showToast({
      title,
      mask: true,
      icon: 'none',
    })
  },

  /**
   * 高阶函数，返回一个新函数，新函数具有原 fn 函数的功能，但是支持 Promise
   * @param {function} fn 微信的接口函数
   */
  createWxPromiseFun(fn) {
    return function (params) {
      return new Promise((resolve, reject) => {
        fn({
          ...params,
          success: resolve,
          fail: reject,
        })
      })
    }
  },

  /**
   * 基于传入的时间戳，转日期字符串：YYYY-MM-DD
   * @param {number} timestamp 时间戳
   */
  dateFormat(timestamp) {
    const date = new Date(timestamp)
    const year = date.getFullYear()
    const month = date.getMonth() + 1
    const day = date.getDate()
    // return `${year}-${month}-${day}`
    // return [year, month, day].map((item) => (item > 10 ? item : '0' + item)).join('-')
    return [year, month, day].map((item) => item.toString().padStart(2, '0')).join('-')
  },

  /**
   * 上传图片
   * @param {string} filePath 文件的路径
   * @param {string} type 上传的类型 avatar 或者没有
   */
  uploadImage(filePath, type) {
    const wxUploaFile = this.createWxPromiseFun(wx.uploadFile)
    const params = {
      filePath,
      name: 'file',
      url: wx.http.baseURL + '/upload',
      header: {
        Authorization: `Bearer ${getApp().token}`,
      },
    }
    if (type === 'avatar') {
      params.formData = { type }
    }
    return wxUploaFile(params).then((res) => {
      const data = JSON.parse(res.data)
      return data.data.url
    })
  },
}

export default utils

// 将 utils 对象挂载到 wx 对象上
// wx 是小程序中的一个全局对象，可以理解为是 web 中 window
wx.utils = utils
